#ifndef __COMPILER__
#define __COMPILER__
// 编译模块
#include "../common/unit.hpp"

namespace oj_compiler
{
    using namespace oj_unit;
    class Compiler
    {
    public:
        Compiler()
        {}

        static bool compile(const std::string& file_name)
        {
            // 创建子进程去执行代码。父进程继续执行编译命令
            pid_t pid = fork();
            if (pid < 0)
            {
                // 创建失败
                return false;
            }
            else if (pid == 0)
            {
                // 子进程
                // 首先将此的错误输出重定向到错误文件中
                int fd = open(PathUtil::Stderr(file_name).c_str(), O_CREAT | O_WRONLY, 0644);  // 没有就进行创建 否则就是只写打开 rw_r__r__
                
                exit(1);  // 防止程序替换失败导致执行后续的步骤
            }
        }

        ~Compiler()
        {}
    };
}

#endif